package com.zw.mes.module.transpositionManager.controller;

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.zw.mes.base.BaseController;
import com.zw.mes.common.JsonResult;
import com.zw.mes.module.prodtaskmanager.entity.ProdPla;
import com.zw.mes.module.prodtaskmanager.entity.ProdPlaRet;
import com.zw.mes.module.tecdrawsign.model.DictEnum;
import com.zw.mes.module.transpositionManager.model.FlowSheetModel;
import com.zw.mes.module.transpositionManager.service.TranspositionCutService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.*;

/**
 * @className: TranspositionCutController
 * @description: 生产转序下料维护控制层
 * @author： 徐一贺 18341916590
 * @date： 2021/4/16 16:46
 * @office: 智能控制设计科
 * @research institute： 智能控制设计所
 * @department： 机械设计院
 * @company: 辽宁忠旺机械设备制造有限公司
 * @group： 忠旺集团
 * @version: 1.0
 */
@Controller
@RequestMapping("/transposition/cutMaintain")
public class TranspositionCutController extends BaseController {
    @Autowired
    private TranspositionCutService service;

    /**
     * @methodName: page
     * @description: 跳转到下料维护页
     * @param: 无
     * @return： java.lang.String
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 16:53
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @GetMapping
    @RequiresPermissions("tran:laying:view")
    public String page() {
        return "/transposition/cut/list/page";
    }

    /**
     * @methodName: list
     * @description: 加载下料维护页列表
     * @param: param 搜索条件
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 16:53
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/list")
    @RequiresPermissions(value = {"tran:laying:view", "overview:home:view"}, logical = Logical.OR)
    public JsonResult list(FlowSheetModel param) {
        return jsonResult(service.findCutListByParam(param));
    }

    /**
     * @methodName: operCutNecessary
     * @description: 执行下料
     * @param: idStr
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/17 8:54
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/operCutNecessary")
    @RequiresPermissions("tran:laying:edit")
    public JsonResult operCutNecessary(FlowSheetModel param) {
        return service.operCutNecessary(param);
    }

    /**
     * @methodName: operCutNecessarys
     * @description: 批量下料
     * @param: cutStr
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/11 13:11
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/operCutNecessarys")
    @RequiresPermissions("tran:laying:edit")
    public JsonResult operCutNecessarys(String cutStr) {
        Date currentDate = new Date();
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm").create();
        List<FlowSheetModel> flowSheetModelList = gson.fromJson(cutStr, new TypeToken<List<FlowSheetModel>>() {
        }.getType());
        String message = "";
        boolean isSuccess = true;
        List<FlowSheetModel>  flowSheetModelList2 = service.findCutListsByParams(flowSheetModelList);
        for (int i = 0; i < flowSheetModelList2.size(); i++) {
            JsonResult jsonResult = service.operCutNecessary(flowSheetModelList2.get(i));
            if (jsonResult.getType() == JsonResult.ResultType.ERROR) {
                isSuccess = false;
                message += "生产令编号为【"+flowSheetModelList2.get(i).getProdNo()+"】,类型为【"+flowSheetModelList2.get(i).getSpecial()+"】，部分为【"+flowSheetModelList2.get(i).getPart()+"】的制作件下料失败，因"+jsonResult.getMsg()+",";
            }
        }
        if(!isSuccess){
           return error("下料失败的信息如下"+message.substring(0,message.length()-1));
        }else {
            return success("下料成功！");
        }
    }

    /**
     * @methodName: operCutUnwanted
     * @description: 执行不需要
     * @param: idStr id们
     * @return： com.zw.mes.common.JsonResult
     * @exception： 已捕获
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/17 8:54
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/operCutUnwanted")
    @RequiresPermissions("tran:laying:edit")
    public JsonResult operCutUnwanted(FlowSheetModel param) {
        return service.operCutUnwanted(param);
    }

    /**
     * 还原下料不需要后再次需要状态
     */
    @ResponseBody
    @PostMapping("/updateOperCut")
    public JsonResult updateOperCut(FlowSheetModel flow){
        return service.updateOperCutFlow(flow);
    }
}
